package thinkingInJava.generics;

//: generics/LinkedStack.java
//A stack implemented with an internal linked structure.

public class LinkedStack<T> {
private static class Node<U> {	// 经自测,将所有 U 改为 T 也没问题,另外,更好的方法是去掉 U, Note 使用外面的 T 就行了
 U item;
 Node<U> next;
 Node() { item = null; next = null; }
 Node(U item, Node<U> next) {
   this.item = item;
   this.next = next;
 }
 boolean end() { return item == null && next == null; }
}
private Node<T> top = new Node<T>(); // End sentinel
public void push(T item) {
 top = new Node<T>(item, top);
}	
public T pop() {
 T result = top.item;
 if(!top.end())
   top = top.next;
 return result;
}
public static void main(String[] args) {
 LinkedStack<String> lss = new LinkedStack<String>();
 for(String s : "Phasers on stun!".split(" "))
   lss.push(s);
 String s;
 while((s = lss.pop()) != null)
   System.out.println(s);
}
} /* Output:
stun!
on
Phasers
*///:~

